"""
@name: __init__.py
@author: liangrui
@projectname: pythonProject
"""
# 1、输入数字n，输出n天前的日期（time或者datatime模块）
# 2、输出指定文件夹下有哪些文件或文件夹（实现ls命令， os）
# 3、列表去重，并且从小到大排序
# 4、如何在一个函数内部修改全局变量
# 5、如何跨模块共享全局变量
# 6、python的基本数据类型有哪些？
# 7、python中生成随机整数（1-10），随机小数（1-10），随机小数（0-1）的方法
# 8、python中哪些是可变数据类型，哪些是不可变数据类型
# #9、a+=1与a=a+1有什么区别
# #10、什么是pep8？说出5点它的标准
# #11、给定一个字符串，找出字符串第一个重复的字符
# #12、简述深拷贝与浅拷贝
# #13、简述python内存机制
# #14、使用python实现冒泡排序，快速排序
# #15、验证一个字符串是否属于回文（从左到右，从右到左都是一样）

# 第1题
# import time
# import datetime
# def get_time(days):
#     dayago=datetime.datetime.now()-datetime.timedelta(days=days)
#     timestamp=dayago.strftime("%Y-%m-%d %H:%M:%S")
#     print(timestamp)
# days=int(input("请输入数字: "))
# get_time(days)

# 第2题
# Python os模块包含普遍的操作系统功能
# import os
# # def file():
# file1=input("请输入指定文件夹:")
# print(os.getcwd())  # 函数得到当前工作目录，即当前Python脚本工作的目录路径。
# print(os.listdir(rf'D:\sc-linux\python\pythonProject\{file1}'))  # 返回指定目录下的所有文件和目录名


# 第3题
# lst1=list(input("请输入列表数字:"))
# print(lst1)
# lst1_1=set(lst1)
# lst2=list(lst1_1)
# lst2.sort()
# print(lst2)

# 4. 加global即可
# num2=1
# def modify():
#     global num1
#     num1=2
#     print(num1)
# a=modify()
# print(num1)
# print(num2)

# 第5题
# 创建一个特殊模块，然后导入即可
# config.py:
# x = 0

# mod.py:
# import config
# config.x = 1

# main.py:
# import config
# import mod
# print(config.x)

# 标准模块 （无需安转和编写，自动导入就有的模块，比如说 random math）
# 第三方模块（别人写好的发布到平台的模块，需要安装，比如 requests 用pip安装）
# 自定义模块 （自己写的模块） 比如日常使用的print

# 第6题
# 整型、浮点型、布尔类型、字符串、元组、列表、字典、集合
# 其中，前四种为不可变数据类型，后三种为可变数据类型

# 7.
# random.randint(a, b)，用于生成一个指定范围内的整数。
# import random
# r1=random.randint(1,10)
# r2=random.uniform(1,10)
# r3=random.random()
#
# print(r1)
# print(r2)
# print(r3)

# 第8题
# 1.列表 2.字典 3.集合 可变数据类型
# 不可变：整型  浮点型  布尔型   元组   字符串

# 9. 对于可变类型，+=内存地址没有改变，而对于不可变类型，内存地址增加了4个字节。
# 而=+这种操作都是增加四个字节。

# 第10题
# pep8指的是python编码风格
# 它的特点有1.使用space来表示缩进，而不要用tab
# 2.和语法相关的每一层缩进用4个空格来表示
# 3.每行的字符数不应超过79
# 4.函数、变量及属性应该用小写字母来拼写，各单词之间以下划线相连
# 5.类与异常，应该以每个单词首字母均大写的格式来命名
# 6.类中的实例方法，应该把首个参数命名为self,以表示该对象的自身

# 第11题.
# lst=[]
# str1=input("请输入字符串:")
# for i in str1:
#
# from collections import defaultdict
# class Solution:
#    def solve(self, s):
#       chars = defaultdict(int)
#       for i in range(len(s)):
#          if s[i] in chars:
#             return i
#          else:
#             chars[s[i]] += 1
#       return -1
# ob = Solution()
# print(ob.solve("abcade"))
#
# def func(str):
#     lst=[]
#     for i in range(len(str)):
#         if str[i] in lst:
#             return i
#         else:
#             i += 1
# print(func("abcdac"))

# 第12题
# 浅拷贝，是重新分配一块内存，创建一个新的对象，但里面的元素是原对象中各个子对象的引用。
# 深拷贝，是指重新分配一块内存，创建一个新的对象，并且将原对象中的元素，以递归的方式，通过创建新的子对象拷贝到新对象中。
# 因此，新对象和原对象没有任何关联。
# 浅拷贝 只拷贝第一层的地址， 改变会影响原来的值
# 深拷贝  ，不会影响原来的值  ，是新的地址

# 第13题
# 统计有那些变量引用指向了当前对象
# 当有新的引用指向的时候，引用技术+1
# 当有无效的引用的时候，引用技术-1
# 当对象的引用计数为0，销毁对象


# 第14题

# # 定义函数名称，传入lis
# def bubbleSort(lis):
#     # 计算传入的列表长度
#     len_lis = len(lis)
#     # 做双层循环
#     for i in range(len_lis - 1):
#         # 内层循环减去已经循环的值
#         for j in range(len_lis - 1 - i):
#             # 此处大小决定是降序还是升序
#             if lis[j] < lis[j + 1]:
#                 lis[j], lis[j + 1] = lis[j + 1], lis[j]
#     return lis
#
# lis = [3, 5, 8, 1, 2, 10, 6]
# print(bubbleSort(lis))
#
#
# # 快速排序法
# def quickSort(lis):
#     # 计算列表长度
#     len_lis = len(lis)
#     # 如果列表的长度已经小于2，则可以将列表 返回
#     if len_lis < 2:
#         return lis
#     # 设置基准值为lis[0]
#     basevalue = lis[0]
#     # 将小于基准值放在列表中
#     left_lis = []
#     # 将大于基准值放在此列表中
#     righ_lis = []
#     # 对列表进行循环
#     for i in range(1, len_lis):
#         # 判断值是否小于基准
#         if lis[i] < basevalue:
#             left_lis.append(lis[i])
#         else:
#             righ_lis.append(lis[i])
#     # 递归调用
#     return quickSort(left_lis) + [basevalue] + quickSort(righ_lis)
# lis = [3, 5, 8, 1, 2, 10, 6]
# print(quickSort(lis))

# 15.验证回文
# num=list(input("请输入:"))
# num1=num[::-1]
# if num1==num:
#     print("是回文数")
# else:
#     print("不是回文数")
